package com.huijie.app.u.service;

import com.huijie.app.u.entity.User;
import com.huijie.core.common.IBaseService;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

import static com.huijie.core.constant.Constants.INIT_LOGIN_PWD;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author echen
 * @since 2019-01-09
 */
public interface IUserService extends IBaseService<User> {

    /**
     * @param userLoginName 用户登陆名
     * @return com.cn.rfid.model.vo.system.User
     * @description: 根据用户名获取用户信息
     * @author Alex
     * @date 2018/9/25 16:56
     */
    public User getUserByloginName(String userLoginName);

    /**
     * @param userId    用户ID
     * @param userStatus 用户状态-正常、锁定、删除
     * @return com.cn.rfid.model.vo.base.BussinessMsg
     * @description: 更改用户状态
     * @author Alex
     * @date 2018/9/25 16:40
     */
    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
    public void updateUserStatus(Integer userId, Integer userStatus);

    /**
     * @param userId    用户ID
     * @return com.cn.rfid.model.vo.system.User
     * @description: 用户状态失效
     * @author Alex
     * @date 2018/9/25 13:42
     */
    public User updateUserStatus(Integer userId);

    /**
     * @param userIds   用户ID
     * @param loginName 当前登录用户名
     * @return boolean
     * @description: 批量用户状态失效
     * @author Alex
     * @date 2018/9/25 14:51
     */
    public void updateUserBatchStatus(Integer[] userIds, String loginName);

    public void deleteUser(Integer userId);

    /**
     * @param user 用户 传输实体
     * @param loginName   当前登录用户
     * @return com.cn.rfid.model.vo.system.User
     * @description: 新增用户信息
     * @author Alex
     * @date 2018/9/25 13:10
     */
    public User insertUser(User user, String loginName);

    /**
     * @param user 用户 传输实体
     * @param loginName   当前登录用户
     * @return com.cn.rfid.model.vo.system.User
     * @description: 更新用户信息
     * @author Alex
     * @date 2018/9/25 13:23
     */
    public User updateUser(User user, String loginName);

    /**
     * @param userId 用户ID
     * @return com.cn.rfid.model.vo.system.User
     * @description: 根据用户Id查询用户角色信息
     * @author Alex
     * @date 2018/9/25 17:42
     */
    public User selectUserRolesByUserId(Integer userId);

    /**
     * @param userId     用户id
     * @param roleIds    分配的角色信息
     * @param longinName 当前登录用户名称
     * @return boolean
     * @description: 新增用户分配角色信息
     * @author Alex
     * @date 2018/9/25 15:55
     */
    public void saveUserRole(Integer userId, String roleIds, String longinName);

    /**
     * @param userLoginName 登录名
     * @param userPassword 密码
     * @return boolean
     * @description: 验证密码
     * @author Alex
     * @date 2018/9/25 16:23
     */
    public boolean validate(String userLoginName,String userPassword);

    /**
     * @param userLoginName 登录名
     * @param userPassword 密码
     * @return boolean
     * @description: 修改用户密码
     * @author Alex
     * @date 2018/9/25 17:05
     */
    public void modifyUserPasswordByUserLoginName(String userLoginName,String userPassword);
    /**
     * @param userIds   用户ID
     * @return boolean
     * @description: 批量用户删除
     * @author Alex
     * @date 2018/9/25 14:51
     */
    public Integer batchDeleteUser(Integer[] userIds);

    /**
     * @param userLoginName
     * @param userId
     * @return java.lang.Long
     * @description: 检查登录名或用户id是否重复,如果id存在，则根据去除id结果
     * @author zyc
     * @date 2019/1/9 17:16
     */
    Boolean selectUserLoginNameCheck(String userLoginName, Integer userId);
}
